#ifndef MYMAINWINDOW_H
#define MYMAINWINDOW_H

#include <QMainWindow>
#include <QtSql>
#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QItemSelectionModel>
#include <QDataWidgetMapper>
#include <QLabel>
#include <QLine>

#include <QTimer>
#include "sqldatabase.h"




class DatabaseManager;
class PaginationController;
class AuthController;

namespace Ui {
class mainwindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    void initSqlModel();

    void init();
    void addSortedUniqueItems(QComboBox *comboBox, const QStringList &items);
public slots:
    void do_updateDepartmentAtteView(const QString &deptName);
protected:
    QStringList getTableNames(const QSqlDatabase &db);
    QStringList getTableFields(const QString &table);

//protected slots:
    void contextMenuEvent(QContextMenuEvent *event);
    void updateSelectedRows();
    void deleteSelectedRows();
    void refreshTableView(const QString &table, int pageNumber);
    void getTotalPages(const QString &table);

    const QVector<std::pair<QString, QString>> &setTableHeaderData(const QString &table);
    void clearTableDelegates(const QString &table);
protected slots:
    void updatePaginationButtons(int currentPage, int totalPages);
    void do_cBox_tables_currentTextChange(const QString &text);
    void do_cBox_tables_updateTables();

    void do_add_empInfo(const QString &rfidCard);

    void do_currentChanged(QModelIndex current, QModelIndex perivous);

    void on_btn_refresh_clicked();


    void on_spinBox_page_valueChanged(int value);

private slots:
    // 页面刷新
    void onTimeout();

    // Tool页面切换
    void on_actBtn_inputInfo_triggered();

    void on_actBtn_queryInfo_triggered();

    void on_actBtn_setAttendanceTime_triggered();

    void on_actBtn_statistical_triggered();

    // UI事件
    void onTableSelectionChanged(const QString& tableName);
    void onRefreshClicked();
    void showContextMenu(const QPoint& pos);


    void on_actBtn_deviceConnect_triggered();

    // 查询模式
    void on_rbtn_queryModel_clicked();
    void on_rbtn_alterModel_clicked();

    void on_btn_ok_clicked();

    void on_btn_conceal_clicked();

private:
    // 初始化
    void setupConnections();
    void initUI();

private:
    Ui::mainwindow *ui;

    // 控制器实例
    DatabaseManager* m_dbManager;
    PaginationController* m_pagination;
    AuthController* m_auth;

    // 显示模式
    bool m_alterFlag;

    // 当前登录用户信息管理
    QString m_userID;
    QString m_userName;
    QString m_userStatus;

    bool m_authority = true;

    QLabel *m_leUserID;
    QLabel *m_leUserName;
    QLabel *m_leUserStatus;


    // 信息映射
    QDataWidgetMapper *m_dataMapper;    // 映射

    QTimer *m_timer;    // 计时器
    QStatusBar *m_statusBar;    // 状态栏


    // 查询模型
    QSqlQueryModel *m_attendanceQueryModel;

};

#endif // MYMAINWINDOW_H
